逆向工程主要針對軟體領域,透過學習計算機底層知識,運用反匯編、反編譯和動態追蹤等技術,分析應用程式的實作過程。舉例來說,當你收到一個 .exe 二進位可執行檔案,想要判斷這個檔案是否含有病毒,就需要進行逆向工程,透過分析其行為來識別是否為病毒。逆向工程的應用範疇包括:軟體破解、病毒分析、遊戲漏洞分析、行動安全、以及二進位漏洞挖掘與利用。(文末將提供一些整理好的逆向工程學習資源)
在逆向工程中,掌握一門語言是基礎。語言是我們與電腦交流的工具。學習逆向工程時,必須具備扎實的語言基礎,否則面對一個軟體時會無從下手。簡單來說,我們大概需要掌握以下語言:
這是解讀底層程式碼的關鍵。在分析他人軟體時,通常沒有原始碼和符號調試(除非是你自己寫的或是開源的)。幾乎所有商業軟體都不會開源程式碼,以避免被他人隨意修改或盜版。因此,逆向分析人員必須使用工具進行無原始碼分析和功能修改,而匯編語言是重點。可以參考王爽老師的《匯編語言》一書,搭配小甲魚的匯編視頻進行學習。
這兩門語言是逆向分析中最常遇到和使用的語言,主要用於編寫補丁等。雖然也可以使用其他語言,但 C/C++ 與計算機底層知識息息相關,因此是必學的。我們推薦學習小甲魚的視頻或其他書籍。
在基礎上,建議擴展學習 Python 編寫腳本,C# 或其他界面開發語言。
OllyDbg:OllyDbg 是一款經典的反匯編調試器,是最基礎的工具,適合用於靜態和動態分析。。熟練掌握這個工具後,我們才能展開真正的逆向分析學習。
IDA Pro:一個強大的逆向工程工具,提供靜態分析和動態調試功能,對於複雜的分析非常有用。
PEiD:用於檢測程式包裝和加殼的工具,可以幫助你了解目標程式的保護技術。
逆向研究的方向包括 Windows、Android、iOS、以及二進位逆向等領域,他們之間會有所不同。但是,方向的選擇是在具備一定基礎後進行的。
目標:分析 Windows 平台上的應用程式、驅動程式、系統元件和 API。
工具:IDA Pro、OllyDbg、WinDbg、Ghidra。
應用:漏洞利用、逆向病毒分析、商業軟體破解、系統行為分析。
目標:分析 Android 應用程式和系統,主要針對 APK 檔案及其內部結構。
工具:APKTool、JADX、Frida、Xposed。
應用:應用破解、惡意程式分析、功能修改、安全性測試。
目標:分析 iOS 應用程式和系統,涉及 IPA 檔案和 iOS 應用的逆向。
工具:Hopper、Frida、Cydia Substrate、Theos。
應用:應用破解、漏洞挖掘、功能改進、安裝未經授權的應用。
目標:發現並利用二進位程式中的漏洞,例如緩衝區溢出、格式化字串漏洞等。
工具:GDB、AFL(American Fuzzy Lop)、Radare2。
應用:漏洞研究、攻擊模擬、漏洞修補、漏洞利用開發。
目標:分析嵌入式系統和固件,通常涉及硬體和嵌入式軟體。
工具:Binwalk、JTAG 調試器、OpenOCD。
應用:固件破解、硬體攻擊分析、嵌入式系統安全性評估。
目標:分析和修改遊戲程式及數據,主要針對遊戲內部機制。
工具:Cheat Engine、GameGuardian、IDA Pro。
應用:遊戲作弊、遊戲功能修改、遊戲安全性測試。
逆向工程的學習並不容易,涉及許多枯燥的技術,如匯編、操作系統底層知識、外殼對抗等,這些都可能讓人放棄。以下是一些學習建議:
基礎打牢:初學者常犯的錯誤是基礎尚未鞏固就急於學習高級技術。例如,還沒掌握 C 語言或 API 就想學習內核驅動。
多多實踐:調試是逆向工程工作者必備的技能。不要僅停留在理論上,應該多動手實踐,避免只依賴未經實踐的結論。
學習資源:網路上有很多學習資源,如優秀的代碼和教程,還有許多專家的分享,都能讓你獲得不少實用的知識。
搜尋引擎:對於初學者來說,遇到的問題大多數可以通過搜尋引擎找到答案。
逆向工程學習教程Reverse Engineering:這套全面的逆向工程教程涵蓋了 x86、x64 以及 32 位 ARM 和 64 位架構。如果您是想學習逆向工程的新手,或只是想了解一些基本概念的人,這裡就是您來對的地方。對於初學者來說,這些教程將帶您從零開始,逐步建立逆向工程的中級基礎,這是資訊安全領域中每個人都應該具備的技能。
https://0xinfection.github.io/reversing/pages/part-11-segment-registers.html
Binary Exploitation Roadmap:https://www.hoppersroppers.org/roadmap/training/pwning.html
交大程式安全(三校合開的資訊安全課程):https://speakerdeck.com/terrynini/2020-jiao-da-cheng-shi-an-quan-ni-xiang-gong-cheng-shang-ke-jiang-yi-nil-di-zhou-di-duan
NYCU 程式安全:https://github.com/LJP-TW/NYCU-Secure-Programming
Android App 逆向入門:https://blog.huli.tw/2023/04/27/android-apk-decompile-intro-1/